# 作业
作业题目：基于面向对象的图书管理系统
目标：

使用 Python 的面向对象思想实现一个简单的图书管理系统。程序应包含以下功能：

添加图书：允许用户添加新的图书。
查看所有图书：能够显示所有已添加的图书信息。
借阅图书：允许用户输入 ISBN 借阅图书。借阅后，图书状态应标记为“borrowed”。
归还图书：允许用户输入 ISBN 归还图书。归还后，图书状态应标记为“available”。
查找图书：允许用户输入书名或者作者进行查找，并显示匹配的图书信息。
要求：

使用类(Class)来组织代码：

创建一个 Book 类，包含属性：title （书名），auther （作者），isbn （ISBN， 唯一标识符），status （状态，可以是"borrowed" 和 "available"）。
创建一个 Library 类，包含一个用于存储 Book 对象的列表。Library 类应该包含实现上述所有功能的方法（列入 add_book(), display_all_books(), borrow_book(), return_book(), find_book()）。
程序应该提供一个简单的文本菜单，允许用户选择要执行的操作。

程序应该能够循环运行，直到用户选择退出。

需要进行简单的输入验证，例如确保 ISBN 是唯一的。

示例菜单：

===== 图书管理系统 =====
1. 添加图书
2. 查看所有图书
3. 借阅图书
4. 归还图书
5. 查找图书
6. 退出
请选择操作 (1-6):
进阶
在查找图书的功能上加上模糊查找，参考正则表达式。

使用 Pandas 的 DataFrame 代替数据库来实现存储数据，也就是 Library 中的属性可以换成一个 DataFrame。

如果使用 Pandas 都没问题的话，可以试试使用 MySQL 来代替 DataFrame 来存储数据。

可以按自己的需求多添加些属性或方法，如 count （每种书籍的数量），各个作者也变成一个 Class 类都行。

可以自己创建一个简单的前端界面，可以使用 html 展示，也可以使用一些 Python 的库来展示，比如Pygame, Tkinter, EasyGUI 也行。



创建分支的时候记得把分支的名字改成自己名字，或者缩写以方便识别，代码中也可以加些注释。
在自己的项目中可以加一个 Readme.md 文件，注明姓名学号班级之类的，可以在里面分享下自己的心得，比如中途遇到的问题以及怎么解决的。
在代码中最好是创建好几个 .py 文件，而不是全部放一个文件中，用到 Python 的模块的知识。
启动程序建议创建个 main.py文件，然后通过 if __name__ == '__main__'来启动。
在代码中多加些注释，养成好习惯，也可以了解 Python Docstring 来写注释。
严禁抄袭！


# 状态
首先明白我自己的状态
只知道一些基础语法，甚至这些语法也要查一查。
同时这个作业似乎是需要面向对象思想。

## 思路
由于我对python知之甚少，而且这个作业相比很多人已经做了很多很多遍，而且重要不是做出一个多好的，
而是创造这个同时学会相关的知识，下次遇到类似的，或者说是使用到同样的知识点时候，可以再次写出。
是为二次必杀。
重点是理解思想，并学习这个语法。

### ai后总体思路
1理解类和对象 学习语法
2明确属性和方法
3主程序循环和菜单。

## 想法
我本来第一个念头是参考ai答案，写一遍，整体理解一下。之后删除后重新写一下。
但是我觉得这样的学习思路并不能真正的增加我的理解，
从全流程优化的角度思考，我可以先学习，然后作业，然后改错，之后复习。这是四个流程
而不是学习复习，这只有两个流程。

## 思考
发现并不知道如何入手，突然想到关联性学习法，我去查查学生管理系统
![alt text](image.png)

## 具体操作
1学习类，这次就分为两个类
2文本菜单 输出
3循环，退出
4检查输入重复不重复
5模块知识
6注释 python docs tring


# 现状
看了看b站视频
https://www.bilibili.com/video/BV1fC4y1u7Hc?spm_id_from=333.788.player.switch&vd_source=1141d6f33a6e269fd537229972813459&p=4

![alt text](image.png)


然后把基础敲了一般

接下来先把push一下，然后之后改一改就就结构和进阶技巧
反正我在library也不太懂